﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Word;
using WordTemplate1.Objets;
using System.Xml;
using Microsoft.TeamFoundation.WorkItemTracking.Client;

namespace WordTemplate1.Methodes
{
    public static class MethodesExtention
    {
        // Hold a list of all the transistions we have done.  This will help us not have run them again If we already have. 
        public static Dictionary<WorkItemType, List<Transition>> _allTransistions = new Dictionary<WorkItemType, List<Transition>>();

        /// <summary> 
        /// Get the transitions for this <see cref="WorkItemType"/> 
        /// </summary> 
        /// <param name="workItemType"></param> 
        /// <returns></returns> 
        public static List<Transition> GetTransistions(this WorkItemType workItemType)
        {
            List<Transition> currentTransistions;

            // See if this WorkItemType has already had it's transistions figured out. 
            _allTransistions.TryGetValue(workItemType, out currentTransistions);
            if (currentTransistions != null)
                return currentTransistions;

            // Get this worktype type as xml 
            XmlDocument workItemTypeXml = workItemType.Export(false);

            // Create a dictionary to allow us to look up the "to" state using a "from" state. 
            var newTransistions = new List<Transition>();

            // get the transistions node. 
            XmlNodeList transitionsList = workItemTypeXml.GetElementsByTagName("TRANSITIONS");

            // As there is only one transistions item we can just get the first 
            XmlNode transitions = transitionsList[0];

            // Iterate all the transitions 
            foreach (XmlNode transition in transitions)
            {
                // save off the transistion  
                newTransistions.Add(new Transition
                {
                    From = transition.Attributes["from"].Value,
                    To = transition.Attributes["to"].Value
                });

            }

            // Save off this transition so we don't do it again if it is needed. 
            _allTransistions.Add(workItemType, newTransistions);

            return newTransistions;
        }

        public class Transition
        {
            public string To { get; set; }
            public string From { get; set; }
        } 
        public static void AddElement(this ContentControl cc, Element element)
        {
            cc.Tag = element.Id.ToString();
        }

        /// <summary>
        /// Permet de récupérer un élement rattaché au content control
        /// </summary>
        /// <param name="cc"></param>
        /// <returns></returns>
        public static Element GetElement(this ContentControl cc)
        {
            if (!String.IsNullOrEmpty(cc.Tag))
            {
                try
                {
                    Guid guid = new Guid(cc.Tag);

                    var element = (from search in Globals.ThisDocument.taskPanel.ListElement
                                   where search.Id == guid
                                   select search).FirstOrDefault();

                    return element;
                }
                catch (Exception ex)
                {
                    return null;
                }
            }

            return null;
        }
    }
}
